//HOLA CHOLO
package DAO;

import bean.Usuario;
import java.sql.*;
import java.util.ArrayList;


public class SQLServerDAOUsuario implements DAOUsuario{
    @Override
    public ArrayList<Usuario> queryAll() {
        
            ArrayList <Usuario> userList = new ArrayList<Usuario>();
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
            //1. Se registra el driver de la BD
            //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Driver myDriver = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM G04_USUARIO");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                int id = rs.getInt("IDUSUARIO");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASEÑA");
                
                Usuario u = new Usuario(id,nombre,apellidoP,apellidoM,ip,contraseña);
                userList.add(u);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return userList;
    }

    @Override
    public int insert(Usuario u) {
        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            //Se prepara la sentencia SQL
            SQLString ="INSERT INTO G04_USUARIO(IDUSUARIO,NOMBRE,APELLIDOPATERNO,APELLIDOMATERNO,IP,CONTRASEÑA)"
                        + "VALUES(?,?,?,?,?,?)";
                pstmt = conn.prepareStatement(SQLString);
                pstmt.setString(1, String.valueOf(u.getId()));
                pstmt.setString(2, u.getNombre());
                pstmt.setString(3, u.getApellidoP());
                pstmt.setString(4, u.getApellidoM());
                pstmt.setString(5, String.valueOf(u.getIp()));
                pstmt.setString(6, u.getContraseña());                   
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }        

    @Override
    public int update(Usuario u) {
        int result=0;
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        String cadI,cadN,cadAP,cadAM,cadIP,cadC;
        
        cadI=Integer.toString(u.getId());
        cadN=u.getNombre();
        cadAP=u.getApellidoP();
        cadAM=u.getApellidoM();
        cadIP=u.getIp();
        cadC=u.getContraseña();
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                   "databaseName=inf282;user=inf282;password=inf282db;";
            con = DriverManager.getConnection(url);
            
            String SQLString = null;
            SQLString ="UPDATE G04_USUARIO SET "+
                       "IDUSUARIO = '"+cadI+
                       "',NOMBRE = '"+cadN+
                       "',APELLIDOPATERNO = '"+cadAP+
                       "',APELLIDOMATERNO = '"+cadAM+
                       "',IP = '"+cadIP+
                       "',CONTRASEÑA = '"+cadC+"'"+
                       " WHERE IDUSUARIO = '"+cadI+"'";
            
            pstmt = con.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }   
        }catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }

    @Override
    public int delete(String id) {
        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
            //Se prepara la sentencia SQL
            SQLString ="DELETE FROM G04_USUARIO"+" WHERE IDUSUARIO = "+id+";";                   
            pstmt = conn.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return result;
    }

    @Override
    public Usuario queryById(String id) {
        Usuario u= new Usuario();        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                   "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM G04_USUARIO WHERE IDUSUARIO = "+id+"";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                int iduser = rs.getInt("IDUSUARIO");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASEÑA");
                
                u.setId(iduser);
                u.setNombre(nombre);
                u.setApellidoP(apellidoP);
                u.setApellidoM(apellidoM);
                u.setIp(ip);
                u.setContraseña(contraseña);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return u;
    }
    
    @Override
    public Usuario queryPass (String id, String pass) {
        Usuario u= new Usuario();        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                   "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM G04_USUARIO WHERE IDUSUARIO = "+id+"";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                int iduser = rs.getInt("IDUSUARIO");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASEÑA");
                
                u.setId(iduser);
                u.setNombre(nombre);
                u.setApellidoP(apellidoP);
                u.setApellidoM(apellidoM);
                u.setIp(ip);
                u.setContraseña(contraseña);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return u;    
    
    }
    
    @Override
    public ArrayList<Usuario> queryByName(String cad) {
   
        ArrayList <Usuario> userList = new ArrayList<Usuario>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
            try {
            //1. Se registra el driver de la BD
            //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Driver myDriver = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM G04_USUARIO WHERE NOMBRE LIKE '"+cad+"%'");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                int id = rs.getInt("IDUSUARIO");
                String nombre = rs.getString("NOMBRE");
                String apellidoP = rs.getString("APELLIDOPATERNO");
                String apellidoM = rs.getString("APELLIDOMATERNO");
                String ip = rs.getString("IP");
                String contraseña=rs.getString("CONTRASEÑA");
                
                Usuario u = new Usuario(id,nombre,apellidoP,apellidoM,ip,contraseña);
                userList.add(u);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return userList;        
    }
}